1. Technical Field
The present invention relates generally to data processing systems, and more particularly, to processors for running multiple virtual machines having disparate instruction set architectures.
2. Description of the Related Art
Present-day computing systems, and in particular large-scale server systems, often include support for running multiple virtual machines (VMs). The system may be a large-scale on-demand server system that executes hundreds of server instances on a single hardware platform to support customers with varying computing requirements. In the most flexible of these systems, multiple partitions, which may differ in operating system or run-time environment, as well as application mix on those environments, are concurrently present in system memory. Processes executing in each partition are run in an environment that supports their execution on a guest operating system (or run-time environment). The virtual machine provides an environment similar enough to a real hardware platform that the operating system can run with little or no modification. A hypervisor (sometimes referred to as a virtual machine monitor) manages all of the virtual machines or partitions and abstracts system resources so that each partition provides a machine-like environment to each environment instance.
However, in order to provide efficient operation, total virtualization of machine code instruction sets is typically not performed. Such total virtualization, generally referred to as processor emulation, cannot reach the efficiency of a machine executing native machine code. Therefore, the above-described systems, in applications in which the VMs must provide environments supporting different native instruction sets, typically include disparate processing units that implement differing instruction set architectures (ISAs). In some instances, disparate processors must be included for critical applications that can only run efficiently in a particular machine code environment. Therefore, even though a particular operating system or run-time environment may be supported across multiple ISAs, a particular application may require that a particular underlying ISA be provided in support of the VM in which that application runs.
In particular, custom applications tend to evolve on particular platforms and are frequently coded or ported to run on only one ISA. Those applications must be supported, as well as a mix of any other custom applications, as well as off-the shelf software. The result is increased customization of systems for particular applications, increasing system cost, and a reduction in availability and system efficiency in that not every processing element and resource is necessarily available or usable for any task that might be assigned to the system. For example, when a system must support VMs that require both the power PC (PPC) and x86 ISAs, but the demand for x86 VMs is not continuous and represents a varying fraction of the total system throughput required at any given time, the amount of x86 processing support will either be over-installed or under-available for much of the time.
Therefore, it would be desirable to provide an efficient mechanism for supporting multiple VMs requiring disparate ISAs. It would further be desirable to provide such a mechanism that efficiently manages electrical power used by the hardware supporting the multiple ISAs.